1945 年 6 月 30 日,Von Neumann 與他的工作夥伴因為曼哈頓工程中使用到了大量的運算,所以採用了當時最先進的電腦 Mark I 和 ENIAC 以達到運算需求。
在使用 Mark I 和 ENIAC 的過程中,他意識到了儲存程序的重要性,從而提出了儲存程序邏輯架構。
Von Neumann 在他的論文: First Draft of a Report on the EDVAC 中提出了儲存程序邏輯架構,後人依據該論文的想法和經驗將儲存程序邏輯架構稱為 Von Neumann architecture。
上圖取自維基百科。
在計算機剛開始發展的年代,計算機只能用來處理特定問題(電路的執行狀態是固定的)。就好比現代的工程計算機或是專家系統,他們只能用來解決特定問題,若想要改變這類計算機的功用,必須更改其線路、甚至是更改結構以達到目的。
而 Von Neumann 提出的架構顛覆了整個世界。新架構藉由創造指令集架構,並將所謂的運算轉化成一串程式指令的執行細節(我們可以把它想成現今的組合語言),讓計算機更具彈性。藉著將指令當成一種特別型態的靜態資料,一台儲存程式型電腦可輕易改變其程式,並在程式控制下改變其運算內容。
儲存程式型概念也可讓程式執行時自我修改程式的運算內容。本概念的設計動機之一就是可讓程式自行增加內容或改變程式指令的記憶體位置,因為早期的設計都要使用者手動修改。但隨著索引暫存器與間接位置存取變成硬體架構的必備機制後,本功能就不如以往重要了。而程式自我修改這項特色也被現代程式設計所棄揚,因為它會造成理解與除錯的難度,且現代中央處理器的管線與快取機制會讓此功能效率降低。
儲存程序電腦在體系架構上主要特點有:
處理器的指令集主要可分為 2 種:
除了上述三個以外,還有非常多的電腦製造商都有投入 CISC 架構的設計,不過當今市場上仍被廣泛使用的只剩下 x86 架構。
RISC 架構有以下特點:
知名的 RISC 架構如下:
ARM
ARM 架構,過去稱作進階精簡指令集機器(英語:Advanced RISC Machine,更早稱作艾康精簡指令集機器,Acorn RISC Machine),是一個精簡指令集(RISC)處理器架構家族,其廣泛地使用在許多嵌入式系統設計。由於節能的特點,其在其他領域上也有很多作為。ARM處理器非常適用於行動通訊領域,符合其主要設計目標為低成本、高效能、低耗電的特性。
-- 維基百科
現今的移動式裝置幾乎都使用 ARM 所提供的處理器架構解決方案 (如: 高通、三星、甚至是蘋果的處理器),ARM 主要採用 IP 授權的販售方式,如此高價的權利金也讓學界或是新創級企業很難設計出解決方案,因此,才會有開源的 RISC 架構誕生。
MIPS
由 MIPS 公司開發並授權的精簡指令集架構,廣泛使用在許多電子產品、網路裝置、個人娛樂裝置與商業裝置上。
最早的 MIPS 架構是 32 位元,最新的版本已經變成 64 位元。商業市場主要競爭對手為 ARM 與 RISC-V,2021 年初,MIPS 公司宣布將投入 RISC-V 的開發,一代豪傑就此謝幕(?)
更多資訊可以參考 【被行動趨勢拋棄】曾被微軟採用,全球 4 大晶片架構之一的 MIPS 宣告陣亡 一文。
RISC-V
基於精簡指令集(RISC)原則的開源指令集架構(ISA),簡易解釋為開源軟體運動相對應的一種「開源硬體」。該專案 2010 年始於加州大學柏克萊分校,但許多貢獻者是該大學以外的志願者和行業工作者。
-- 維基百科
與大多數指令集相比,RISC-V 指令集可以自由地用於任何目的,允許任何人設計、製造和銷售 RISC-V 晶片和軟體而不必支付給任何公司專利費。
目前國內外也都有公司在發展 RISC-V 架構,如: 晶心科技、 SI-Five 等。
而 RISC-V 也將是本系列文介紹的重點,後續探討現代處理器文章都會以 RISC-V 架構作為教材,甚至是到作業系統篇,筆者也會採用基於 RISC-V 架構的作業系統來做介紹。
最初,處理器都是 CISC 架構,隨著時間推演,處理器設計者將越來越多的運算指令放入架構中,以 X86 為例子: 最初的處理器架構一定會有基本的運算指令、浮點數運算指令,在 X86 發展的過程中,有越來越多的擴充被加進去 (MMX, SSE, AVX...),為了支援這些指令集,設計者勢必要將更多的硬體放入處理器當中。如此一來,功耗就成了 CISC 最頭痛的問題。
撇開功耗不說,在 CISC 架構中,只有約 20% 的指令會經常的被使用,且佔整體程式的 80%,這也就代表多數的指令其實佔據了處理器的硬體資源卻鮮少被使用。
1979 年,美國加州大學柏克萊分校的 David Patterson 教授提出了將指令集架構精簡化的想法,他認為硬體應該專心加速常用的指令,剩下較為複雜的指令可以利用基本指令做組合。
現今 RISC 與 CISC 不再有顯著的差異,RISC 處理器的硬體設計與指令隨著時間的推演越來越複雜,而 CISC 處理器則是採用微碼來實現複雜指令集。關於這點,最早可以追溯至 Intel 的 Pentium Pro 處理器,其 micro-operation (或稱 uop) 奠定今日高速 x86 設計的基礎。